import axios from 'axios'
import { ElMessage } from 'element-plus'

// 根据环境配置 API 基础 URL
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000'

console.log('API Base URL:', API_BASE_URL)

// 判断是否为相对路径
const isRelativePath = API_BASE_URL.startsWith('./') || API_BASE_URL.startsWith('/')

const api = axios.create({
  baseURL: isRelativePath ? '' : API_BASE_URL,
  timeout: 30000,
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    
    // 如果是相对路径，添加 /api 前缀
    if (isRelativePath) {
      // 排除静态资源请求
      if (!config.url.startsWith('/assets/') && 
          !config.url.startsWith('/static/') &&
          !config.url.includes('.') && // 排除文件扩展名
          !config.url.startsWith('/api')) {
        config.url = `/api${config.url.startsWith('/') ? '' : '/'}${config.url}`
      }
    }
    
    console.log(`API 请求: ${config.method?.toUpperCase()} ${config.url}`)
    return config
  },
  (error) => {
    console.error('请求配置错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
// // 响应拦截器
api.interceptors.response.use(
  (response) => {
    console.log(`API 响应成功: ${response.status} ${response.config.url}`)
    return response
  },
  (error) => {
    console.error('API 响应错误:', {
      url: error.config?.url,
      method: error.config?.method,
      status: error.response?.status,
      data: error.response?.data,
      message: error.message
    })

    if (error.response) {
      const { status, data } = error.response

      switch (status) {
        case 401:
          console.log('检测到 401 错误，清除认证状态')
          localStorage.removeItem('token')
          // 不在这里跳转，由组件处理
          break
        case 403:
          ElMessage.error('权限不足')
          break
        case 404:
          if (error.config?.url.includes('/api/')) {
            console.log('API 端点不存在:', error.config.url)
          }
          break
        case 500:
          ElMessage.error('服务器内部错误')
          break
        default:
          if (data && data.detail) {
            ElMessage.error(data.detail)
          }
      }
    } else if (error.request) {
      ElMessage.error('网络连接错误，请检查后端服务状态')
    }

    return Promise.reject(error)
  }
)

export default api
